package busco

import (
	"wails/schema/config/commonco"
	"wails/schema/enums/busenum"
)

// 执行编号为配置编号，一个配置就是一个执行
// 执行分两种情况：
// 1. 独立
// 2. 被引用
// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行
type B执行 struct {

	// @alias 标识
	F标识 string

	// @alias 几率
	// 指定该执行将被执行的几率 (0和1之间)。0表示永远不会被执行；1 (默认)即表示始终会执行。
	J几率 float64 `value:"1"`

	// @alias 标旗
	B标旗 map[Y执行标旗]bool

	// @alias 消费
	X消费 map[string]*S消费列表项

	// @alias 分类
	// 场景：用于区分分类，例如合成系统的分类页签
	F分类 string

	// @alias 标签
	// 用于查找
	B标签 map[string]string

	// 执行时的主体
	// @alias 执行主体
	Z执行主体 *S查找主体

	// @alias 执行条件
	// 符合条件才能使用执行
	Z执行条件 map[string]string `link:"条件"`

	// 执行完成后，获得的奖励
	// @alias 完成奖励
	Z完成奖励 string `link:"奖励"`

	// @alias 后续执行
	H后续执行 string `link:"执行"`
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_修改主体动态属性
type B执行_修改主体动态属性 struct {
	B执行

	// @alias 属性集
	S属性集 map[string]*Z执行修正_属性
	// 允许后，如果参数中存在【属性】参数，代替【属性】中的【值】
	// @alias 允许属性参数
	Y允许属性参数 bool
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_创建卡页
type B执行_创建卡页 struct {
	B执行

	// @alias 查找卡本
	C查找卡本 string `link:"卡本"`
	// 优先采用参数中设置的【标题】
	// @alias 标题
	B标题 string
	// 优先采用参数中设置的【图标】
	// @alias 图标
	T图标 string
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_删除卡页
type B执行_删除卡页 struct {
	B执行

	// @alias 查找卡本
	C查找卡本 string `link:"卡本"`
	// 优先采用参数中设置的【卡页】
	// @alias 卡页
	K卡页 string
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_重置卡页
type B执行_重置卡页 struct {
	B执行

	// @alias 查找卡本
	C查找卡本 string `link:"卡本"`
	// 优先采用参数中设置的【卡页】
	// @alias 卡页
	K卡页 string
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_激活卡页
type B执行_激活卡页 struct {
	B执行

	// @alias 查找卡本
	C查找卡本 string `link:"卡本"`
	// 优先采用参数中设置的【卡页】
	// @alias 卡页
	K卡页 string
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_移动卡槽卡片
type B执行_移动卡槽卡片 struct {
	B执行

	// @alias 来源卡槽
	L来源卡槽 *S查找卡槽

	// @alias 目标卡槽
	M目标卡槽 *S查找卡槽

	// 允许使用来源卡片的【装备到卡槽】代替【目标卡槽】
	// @alias 允许装备到卡槽
	X允许装备到卡槽 bool

	// @alias 需要目标卡包允许装备
	X需要目标卡包允许装备 bool
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_删除卡槽卡片
type B执行_删除卡槽卡片 struct {
	B执行

	// @alias 目标卡槽
	M目标卡槽 *S查找卡槽
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_分解卡槽卡片
type B执行_分解卡槽卡片 struct {
	B执行

	// @alias 目标卡槽
	M目标卡槽 *S查找卡槽

	// 0-表示分解全部
	// @alias 数量
	S数量 int

	// 允许传入参数【目标卡槽】
	// @alias 允许参数_目标卡槽
	Y允许参数_目标卡槽 bool

	// 允许传入参数【数量】
	// @alias 允许参数_数量
	Y允许参数_数量 bool
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_分解卡片集合
type B执行_分解卡片集合 struct {
	B执行

	// @alias 目标卡片集合
	M目标卡片集合 *S查找卡片集合
}

// 修改卡包
// 实体模式会出现多个相同配置编号的卡片，需要考虑实现策略
// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_修改卡包
type B执行_修改卡包 struct {
	B执行

	// 优先采用参数中设置的【卡包】
	// @alias 查找卡包
	C查找卡包 string `link:"卡包"`
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_修改卡包_清理
type B执行_修改卡包_清理 struct {
	B执行_修改卡包
}

// 修改卡片
// 实体模式会出现多个相同配置编号的卡片，需要考虑实现策略
// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_修改卡片
type B执行_修改卡片 struct {
	B执行

	// @alias 查找卡包
	C查找卡包 string `link:"卡包"`

	// 优先采用参数中设置的【卡片】：未实现
	// @alias 查找卡片
	C查找卡片 string `link:"卡片"`
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_修改卡片_数量
type B执行_修改卡片_数量 struct {
	B执行_修改卡片
	// @alias 修改数量
	X修改数量 *S数值修正
	// 允许后，如果参数中存在【数量】参数，代替【数量】中的【值】
	// @alias 允许数量参数
	Y允许数量参数 bool
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_修改卡片_升级
type B执行_修改卡片_升级 struct {
	B执行_修改卡片
	// @alias 最大值
	Z最大值 int
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_修改卡片_等级
type B执行_修改卡片_等级 struct {
	B执行_修改卡片
	// @alias 等级
	D等级 *S数值修正
	// 允许后，如果参数中存在【等级】参数，代替【等级】中的【值】
	// @alias 允许等级参数
	Y允许等级参数 bool
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_修改卡片_属性
type B执行_修改卡片_属性 struct {
	B执行_修改卡片
	// @alias 属性
	S属性 *Z执行修正_属性
	// 允许后，如果参数中存在【属性】参数，代替【属性】中的【值】
	// @alias 允许属性参数
	Y允许属性参数 bool
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_修改副本
type B执行_修改副本 struct {
	B执行

	// 格式1: 配置编号
	// 格式2: #标识
	// @alias 查找副本
	C查找副本 string `link:"副本"`
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_修改副本_属性
type B执行_修改副本_属性 struct {
	B执行_修改副本

	// @alias 修改属性
	S修改属性 *Z执行修正_属性
	// 允许后，如果参数中存在【属性】参数，代替【属性】中的【值】
	// @alias 允许属性参数
	Y允许属性参数 bool
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_修改等级
type B执行_修改等级 struct {
	B执行
	// @alias 等级
	D等级 *S查找等级
	// @alias 操作
	C操作 commonco.S数值操作
	// @alias 值
	Z值 float64
	// @alias 限制
	X限制 *ValueRange
}

// @alias 执行修正_属性
type Z执行修正_属性 struct {
	// @alias 操作
	C操作 commonco.S数值操作
	// @alias 值
	Z值 float64
	// @alias 限制
	X限制 *ValueRange
	// @alias 属性
	S属性 string `link:"属性"`
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_重置得分
type B执行_重置得分 struct {
	B执行

	// @alias 得分
	D得分 *S查找得分
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_发送邮件
type B执行_发送邮件 struct {
	B执行
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_奖励
type B执行_奖励 struct {
	B执行

	// @alias 奖励
	D奖励 string `link:"奖励"`

	// 符合【分解条件】的卡片将被分解
	// @alias 分解卡片条件
	F分解卡片条件 map[string]string `link:"条件"`
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_修改扩展属性
type B执行_修改扩展属性 struct {
	B执行

	// @alias 扩展属性
	K扩展属性 string `_type:"扩展属性修改"`
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_领取任务奖励
type B执行_领取任务奖励 struct {
	B执行

	// @alias 任务
	D任务 *S查找任务
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_领取任务集奖励
type B执行_领取任务集奖励 struct {
	B执行

	// @alias 任务集
	D任务集 *S查找任务集
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_接受任务
type B执行_接受任务 struct {
	B执行

	// @alias 任务
	D任务 *S查找任务
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_拒绝任务
type B执行_拒绝任务 struct {
	B执行

	// @alias 任务
	D任务 *S查找任务
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_放弃任务
type B执行_放弃任务 struct {
	B执行

	// @alias 任务
	D任务 *S查找任务
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_完成任务
type B执行_完成任务 struct {
	B执行

	// @alias 任务
	D任务 *S查找任务
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_强制完成任务
type B执行_强制完成任务 struct {
	B执行

	// @alias 任务
	D任务 *S查找任务
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_集合
type B执行_集合 struct {
	B执行

	// @alias 策略
	C策略 X执行集合策略

	// @alias 执行集
	X执行集 []*S执行集合项
}

// @alias 执行_遍历主体
type B执行_遍历主体 struct {
	// @alias 查找卡片
	C查找卡片 *S查找卡片集合
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_修改得分
type B执行_修改得分 struct {
	B执行

	// 得分记录到的标识位置
	// 默认为统计的默认标识，例如登陆的标识为[登陆]
	// 通过设置[得分标识]，不同的统计可以统计到同一个标识中
	// 例如收集物品任务，收集指定物品列表中任意一个物品都可以得一分，这是可以设置相同成相同的标识
	// @alias 得分
	D得分 string `link:"得分"`

	// @alias 数量
	S数量修正 *S数值修正
}

// @alias 执行集合项
type S执行集合项 struct {
	// @alias 条件
	T条件 map[string]string `link:"条件"`
	// @alias 执行
	X执行 string `link:"执行"`
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_重置商店属性
type B执行_重置商店属性 struct {
	B执行

	// @alias 商店
	S商店 string `link:"商店"`

	// @alias 属性
	S属性 busenum.C重置商店属性
}

// @schema_export --ident=schema --json --config=执行
// @schema_go
// @cache_go
// @cache_ts
// @alias 执行_脚本
type B执行_脚本 struct {
	B执行
}

type Y执行标旗 int

const (
	Y执行标旗_禁止 Y执行标旗 = 0
	// 否则，只能通过功能接口访问
	// 场景：零散的执行不需要通过功能接口就能访问，减少配置量
	Y执行标旗_可通过执行接口访问 Y执行标旗 = 1
	Y执行标旗_禁止服务器返回响应 Y执行标旗 = 3
	// 确保【允许服务器返回响应】已开启
	Y执行标旗_派发界面事件 Y执行标旗 = 2
)

type S执行统计 struct {
	// @alias 位置
	W位置 S执行统计位置
}

type S执行统计位置 int

const (
	S执行统计位置_角色 S执行统计位置 = iota
	S执行统计位置_单位
	S执行统计位置_物品
	S执行统计位置_玩家
)

// @schema_go
// @alias 执行集合策略
type X执行集合策略 int

const (
	// 执行组按照顺序执行，直到执行次数达到计数
	X执行集合策略_列表 X执行集合策略 = iota
	// 执行组按照顺序执行，直到执行次数达到1
	X执行集合策略_选择
)

// @schema_export --ident=schema --json
// @schema_go
type Z执行所在主体 int

const (
	// 自动设置成被引用的配置【所在主体】
	Z执行所在主体_自动  Z执行所在主体 = 0
	Z执行所在主体_角色  Z执行所在主体 = 2
	Z执行所在主体_玩家  Z执行所在主体 = 3
	Z执行所在主体_队伍  Z执行所在主体 = 4
	Z执行所在主体_团队  Z执行所在主体 = 5
	Z执行所在主体_公会  Z执行所在主体 = 6
	Z执行所在主体_游戏服 Z执行所在主体 = 7
	// 通常一个物理节点为一个区服
	Z执行所在主体_区服 Z执行所在主体 = 8
)
